/**
 *
 * 这种模式是基于类的
 */

// 被观察者的类：  被观察者  需要将观察者收集起来
class Subject {
  constructor(name) {
    this.name = name;
    this.state = '非常开心';
    this.observers = [];
  }

  // 存下状态
  attach(o) {
    this.observers.push(o);
  }
  // 更新自己的状态
  setSate(newState) {
    this.state = newState;
    this.observers.forEach(o => o.update(this.name, newState));
  }
}

// 观察者的类
class Observer {
  constructor(name) {
    this.name = name;
  }
  update(s, state) {
    console.log(this.name + ':' + s + '当前' + state);
  }
}

// vue数据变了（状态）  视图要更新  （通知依赖的人）
let s = new Subject('小宝宝');

let o1 = new Observer('爸爸');
let o2 = new Observer('妈妈');

s.attach(o1);
s.attach(o2);
s.setSate('不开心了');
s.setSate('开心了');
